package flex.cc.uac.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import flex.cc.base.dto.LoginAuthDto;
import flex.cc.core.mybatis.BaseEntity;
import lombok.Data;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Transient;

import org.springframework.format.annotation.DateTimeFormat;

/**
 * 业务机构表
 *
 * @author zhangzk
 * @email zhangzhikai@sinosoft.com.cn
 * @date 2020-09-19 12:49:58
 */
@Data
@TableName("flex_uac_company")
public class UacCompanyEntity{
    private static final long serialVersionUID = 1L;

    /**
     * 机构代码
     */
    @TableId
    private String comCode;
        
    /**
     * 机构中文名称
     */
    private String comCName;
        
    /**
     * 机构英文名称
     */
    private String comEName;
        
    /**
     * 机构简称
     */
    private String comShortName;
        
    /**
     * 地址中文名称
     */
    private String addressCName;
        
    /**
     * 地址英文名称
     */
    private String addressEName;
        
    /**
     * 邮编
     */
    private String postCode;
        
    /**
     * 电话
     */
    private String phoneNumber;
        
    /**
     * 传真
     */
    private String faxNumber;
        
    /**
     * 上级机构代码
     */
    private String upperComCode;
        
    /**
     * 归属公司名称
     */
    private String insurerName;
        
    /**
     * 机构类型
     */
    private String comType;
        
    /**
     * 机构性质
     */
    private String comFlag;
        
    /**
     * 是否业务归属机构
     */
    private String centerFlag;
        
    /**
     * 机构树级别
     */
    private Integer comLevel;
        
    /**
     * 分支机构类型
     */
    private String branchType;
        
    /**
     * 所有上级机构路径
     */
    private String upperPath;
    
    /**
     * 保监会机构代码
     */
    private String comCodecirc;
    
    /**
     * 许可证号码
     */
    private String licenseNo;
        
    /**
     * 邮件地址
     */
    private String email;
        
    /**
     * 备注1
     */
    private String remark1;
        
    /**
     * 机构类型
     */
    private String comKind;
        
    /**
     * 经理
     */
    private String manager;
        
    /**
     * 会计
     */
    private String accountant;
        
    /**
     * 备注
     */
    private String remark;
        
    /**
     * 最新机构代码
     */
    private String newComCode;
        
    /**
     * 生效时间
     */
    private Date validDate;
        
    /**
     * 失效时间
     */
    private Date invalidDate;
        
    /**
     * 效力状态
     */
    private String validStatus;
        
    /**
     * 账户归属机构代码
     */
    private String acntUnit;
        
    /**
     * 专项代码(对应会计科目)
     */
    private String articleCode;
        
    /**
     * 更新标志
     */
    private String updateFlag;
        
    /**
     * 更新日期
     */
    private Date updateDate;
        
    /**
     * 操作员归属机构
     */
    private String operatorComCode;
        
    /**
     * 标志字段
     */
    private String flag;
        

    /**
     * 机构层级代码
     */
    private String hrLevelCode;
        
    /**
     * 营业时间
     */
    private String workTime;
        
    /**
     * 经度
     */
    private String longitude;
        
    /**
     * 纬度
     */
    private String latitude;
                                                        
    private String pkdeptdoc;
    
    /**
     * 创建人
     */
    private String creator;

    /**
     * 创建人ID
     */
    @Column(name = "creator_id")
    private Long creatorId;

    /**
     * 创建时间
     */
    @Column(name = "created_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createdTime;

    /**
     * 最近操作人
     */
    @Column(name = "last_operator")
    private String lastOperator;

    /**
     * 最后操作人ID
     */
    @Column(name = "last_operator_id")
    private Long lastOperatorId;

    /**
     * 更新时间
     */
    @Column(name = "update_time")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    @TableField(exist = false)
    private Integer pageNum;

    @TableField(exist = false)
    private Integer pageSize;

    @Transient
    @JsonIgnore
    public void setUpdateInfo(LoginAuthDto user, boolean isNew) {
        if (isNew) {
            this.creatorId = (this.lastOperatorId = user.getUserId());
            this.creator = user.getUserName();
            this.createdTime = (this.updateTime = new Date());
        }
        this.lastOperatorId = user.getUserId();
        this.lastOperator = user.getUserName() == null ? user.getLoginName() : user.getUserName();
        this.updateTime = new Date();
    }
}
